package com.cn.wanxi.util;

import com.cn.wanxi.dto.ResultModel;
import net.sf.json.JSONArray;
import redis.clients.jedis.Jedis;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/*")
public class Fileter implements Filter {
    /**
     * 项目初始化要做的一件事
     *
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        request.setCharacterEncoding("UTF-8");//解决页面请求乱码问题
        response.setCharacterEncoding("UTF-8");//解决后台返回页面数据乱码问题
        response.setContentType("text/json;charset=utf-8");//解决传值乱码
        response.setHeader("Access-Control-Allow-Origin", "*");//解决跨域问题
//        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
//        response.setHeader("Access-Control-Max-Age", "3600");
//        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type");
//        response.setHeader("Access-Control-Allow-Credentials", "true");
        System.out.println(request.getContextPath() + "----getContextPath");
        System.out.println(request.getServletPath() + "----getServletPath");

        /**
         * 因为我们用的是前后端分离项目，所以不能用session
         * 第三阶段的时候，九大内置对象和四大作用域
         * page  当前页面
         * request  当前请求
         * session  当前会话
         * application 当前应用程序
         * 以上四个作用域都是值作用于当前项目
         * 而我们现在用的是前后端分离项目，就不能用
         * 所以这里推荐用redis缓存
         *
         */
//        Jedis jedis = new Jedis();
//
//        String username = jedis.get("username");
//        //判断缓存里面是否有已经登陆过的用户名，如果没有，则需要登录，
//        //点击登录的时候，不能访问http://localhost:8080/back/login.html，必须放行
//
//        if (username == null) {
//            if ("/login".equals(request.getServletPath())) {
//                filterChain.doFilter(request, response);//当前面正确的时候就进行放行
//            } else {
//                //前后端分离的情况下不需要再后台跳转页面
//                //response.sendRedirect("http://localhost:8080/back/login.html");
//                JSONArray jsonArray = JSONArray.fromObject(new ResultModel(ResultModel.ERRORCODE,"请重新登录"));
//                response.getWriter().println(jsonArray);
//            }
//        } else {
//            filterChain.doFilter(request, response);//当前面正确的时候就进行放行
//        }
        filterChain.doFilter(request, response);
/**
 * /code
 * /login
 * 对于index.jsp,/code,/login要放行，其他的页面或者文件必须经过登录才能放行
 */

    }

    /**
     * 销毁
     */
    @Override
    public void destroy() {

    }
    /**
     * 过滤器和redis
     * 1.过滤器（两种实现方式 1，注解 2，web.xml配置）
     *      1)作用：将每一个Servlet类的方法统一放在过滤器里面
     *      请求编码，响应编码，页面乱码，
     *      请求域（跨域问题）response.setHeader("Access-Control-Allow-Origin", "B.*");
     *      *号表示所有地址都可以访问。 A放后台代码，B服务器放前端代码
     *      2)允许哪些地址访问
     *      需要进行判断
     *      3）以前session判断时，需要进行用户名和密码比较。这里也需要
     *           if (username.equals(userModel.getUsername())){
     *
     *         }
     *         必须设置需要多长时间更新
     * 2.缓存redis（String）
     *          Jedis jedis=new Jedis();
     *          jedis.set("username",username);
     *          jedis.expire("username",30);
     *    1）Jedis里面参数的问题 host 121.199.55.96 ，port6379两个参数
     *    2）区分是否是自己的缓存。如果地址和端口一样，清除缓存时会清除别人的缓存
     *
     */
}
